package com.mofum.msdom.excel.template.reader;

import com.mofum.msdom.excel.constant.SheetItemType;
import com.mofum.msdom.excel.template.metadata.MPExcelTemplate;
import org.apache.poi.ss.usermodel.Workbook;

import java.io.File;
import java.io.InputStream;
import java.util.Map;

/**
 * Excel 模板读取器
 * -----------------------------------------------------------------
 * 1、设置模板
 * 2、根据模板生成新的模板的拷贝。
 * 3、获取模板中和Excel的行列对应关系。
 * 4、获得模板中的值映射到对应模型。
 * -----------------------------------------------------------------
 *
 * @author yuyang@qxy37.com
 * @since 2019/1/24 0024 10:16
 */
public interface IExcelTemplateReader<Callback> {

    /**
     * 读取模板
     *
     * @param template Excel模板
     * @param typeMap  返回类型map
     * @param callback 回调函数
     * @param sheets   模板Sheet
     */
    void read(MPExcelTemplate template, Map<String, SheetItemType> typeMap, Callback callback, Integer... sheets);

    /**
     * 读取模板
     *
     * @param template Excel模板
     * @param typeMap  返回类型map
     * @param callback 回调函数
     * @param sheets   模板Sheet
     */
    void read(File template, Map<String, SheetItemType> typeMap, Callback callback, Integer... sheets);

    /**
     * 读取模板
     *
     * @param template Excel模板
     * @param typeMap  返回类型map
     * @param callback 回调函数
     * @param sheets   模板Sheet
     */
    void read(InputStream template, Map<String, SheetItemType> typeMap, Callback callback, Integer... sheets);

    /**
     * 读取模板
     *
     * @param template Excel模板
     * @param typeMap  返回类型map
     * @param callback 回调函数
     * @param sheets   模板Sheet
     */
    void read(String template, Map<String, SheetItemType> typeMap, Callback callback, Integer... sheets);

    /**
     * 读取模板
     *
     * @param template Excel模板
     * @param typeMap  返回类型map
     * @param callback 回调函数
     * @param sheets   模板Sheet
     */
    void read(Workbook template, Map<String, SheetItemType> typeMap, Callback callback, Integer... sheets);

}
